package ic.doc.co2nudge.server;

import ic.doc.co2nudge.client.utils.Utils;
import ic.doc.co2nudge.shared.model.Trip;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.TreeMap;

import com.google.gwt.user.client.Window;


public class PredictionService {

//	public static ArrayList calcWeightedMovingAverage(ArrayList<Double> data, int period){
//		
//		ArrayList<Double> source=data;
//		double[] out=new double[TOTAL_PERIODS];
//		
//		ArrayList<Double> movAverage=
//			new ArrayList<Double>();
//		
//		int n=period;
//		
//		for (int i=0; i<data.size(); i++){
//			movAverage.add(calcNextAverageValue(data, i, n));
//		}
//		
//		return movAverage;
//	}
	
//	public static double calcDeltaIncrementValue(List<Double> data) {
//		
//		int n=data.size();
//		int size=data.size();
//		
//		double nextValue=0D;
//		double upperSum=0D;
//		double lowerSum=0D;
//		
//		for (int i=size-1; i>=1; i--){
//			double delta=(Double)data.get(i)-(Double)data.get(i-1);
//			upperSum+=n*delta;
//			lowerSum+=n;
//			n--;
//		}
//		
//		nextValue= upperSum/lowerSum;	
//		return nextValue;
//	}
	
	public static double calcNextAverageValue(List<Double> data){
		
		int n=data.size();
		int size=data.size();
		
		double nextValue=0D;
		double upperSum=0D;
		double lowerSum=0D;
		
		for (int i=size-1; i>=1; i--){
			double delta=(Double)data.get(i)-(Double)data.get(i-1);
			upperSum+=n*delta;
			lowerSum+=n;
			n--;
		}
		
		nextValue=  upperSum/lowerSum;	
		return nextValue;
	}
	
//	public static ArrayList<Double> calctrendRates(int x1, double y1, int x2, double y2) {
//		double b=0;
//		double m=0;
//		
//		ArrayList<Double> trendRates=
//			new ArrayList<Double>();
//		
//		m=(y2-y1)/(x2-x1);
//		b=y1-m*x1;
//		
//		trendRates.add(y1);
//		
//		for (int i=x1+1; i<x2; i++){
//			double y=m*i+b;
//			trendRates.add(y);
//		}
//		
//		trendRates.add(y2);
//		return trendRates;	
//	}
}
